package src.ten;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

public class DynamicArray extends JFrame {
    private static final long serialVersionUID = 1L;

    private JTextField textField;     //输入姓名的文本框
    private List<String> arraylist = new ArrayList<String>();//存储输入姓名的集合
    private JList<String> list;

    public static void main(String[] args){
        EventQueue.invokeLater(new Runnable(){
            public void run(){
                try{
                    UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
                    DynamicArray dynamicArray = new DynamicArray();//创建一个新类
                    dynamicArray.setVisible(true);
                }catch(Exception e){
                    e.printStackTrace();
                }
            }
        });
    }

    public DynamicArray(){// 构造函数

        getContentPane().setLayout(null);
        setBounds(100,100,520,380);    //边界大小
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setTitle("用动态数组保存学生姓名");   //窗体框名

        final BackgroundPanel backgroundPanel = new BackgroundPanel();  //背景组件
        backgroundPanel.setBounds(0, 0, 510, 380);   //设置边界
        getContentPane().add(backgroundPanel);  //将背景组件加入到总组件


        JScrollPane scrollPane = new JScrollPane();  //设置一个滚动框组件
        backgroundPanel.add(scrollPane,BorderLayout.CENTER);
        scrollPane.setBounds(10, 10, 300, 280);  //设置大小

        list = new JList<String>();   //创建一个列表控件
        scrollPane.setViewportView(list);//创建一个视口（如果有必要）并设置其视图。这一句我查了资料，并没有弄得很明白

        final JPanel panel = new JPanel();
        scrollPane.setColumnHeaderView(panel);


        final JLabel label = new JLabel("学生姓名:");
        panel.add(label);

        textField  = new JTextField();
        textField.setColumns(10);
        panel.add(textField);

        final JButton button1 = new JButton();
        button1.setBounds(350, 30, 100, 30);
        button1.setText("添加学生");
        button1.addActionListener(new ActionListener(){//添加事件监听
            public void actionPerformed(ActionEvent e){
                do_button1_actionPerformed(e);//调用该方法
            }
        });
        backgroundPanel.add(button1);

        final JButton button2 = new JButton();
        button2.setBounds(350, 100, 100, 30);
        backgroundPanel.add(button2);
        button2.setText("删除学生");
        button2.addActionListener(new ActionListener(){//添加事件监听
            public void actionPerformed(ActionEvent e){
                do_button2_actionPerformed(e);
            }
        });
    }


    protected void do_button1_actionPerformed(ActionEvent e){  //点击添加学生按钮函数
        textField.requestFocusInWindow(); //获得创建新窗体的焦点，焦点设为姓名输入框
        textField.selectAll();  //选择文本框，准备下次输入
        String text = textField.getText();//获得文本框输入的内容
        if(text.isEmpty()){
            return;
        }

        arraylist.add(text);  //将内容加到数组集合
        repalceModel();   //把数组集合的内容显示到界面列表控件中
    }

    protected void do_button2_actionPerformed(ActionEvent e){
        Object value = list.getSelectedValue(); //获取列表控件的选择项
        arraylist.remove(value); //从数组集合中删除该选择项
        repalceModel(); //把数组集合的内容显示到界面列表控件中
    }

    @SuppressWarnings({ "rawtypes", "unchecked" })
    private void repalceModel(){
        //为列表控件设置数据模型显示数组集合中的数据
        list.setModel(new AbstractListModel(){

            private static final long serialVersionUID = -3406879889366471211L;
            @Override
            public int getSize(){//获取数组大小
                return arraylist.size();
            }
            @Override
            public Object getElementAt(int index){//获取指定索引元素
                return arraylist.get(index);
            }
        });
    }
}
